{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Imports\n",
    "\n",
    "Import all the modules and functionalities we need."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "# Import standard libraries.\n",
    "import os\n",
    "\n",
    "# Import third party libraries.\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import scipy.stats as stats\n",
    "import seaborn as sns\n",
    "from statsmodels.stats.multitest import multipletests\n",
    "from statsmodels.stats.proportion import proportions_ztest\n",
    "\n",
    "# Import custom libraries/scripts.\n",
    "import annotations\n",
    "import helpers"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Loading data\n",
    "\n",
    "Fetch all our relevant data for the current analysis."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# Set working constants.\n",
    "EXPERIMENTS_PATH = r'D:\\Miguel\\PhD\\Results\\Competition\\DL\\small_arenas\\progeny_fitness\\processed'\n",
    "FPS = 60\n",
    "N_MINUTES = 5 # We're only annotating the first 5 minutes of copulation, irrespective of video length.\n",
    "N_FRAMES = N_MINUTES * 60 * FPS # First five minutes of copulation.\n",
    "INK = 'black'\n",
    "condition_order = ['free_competition', 'partitioned_competition', 'single_pair']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# Set figure configurations.\n",
    "sns.set(\n",
    "        context='paper',\n",
    "        style='ticks',\n",
    "        font='sans-serif',\n",
    "        font_scale=1.0, \n",
    "        rc={\n",
    "            'axes.axisbelow': True,\n",
    "            'axes.edgecolor': INK,\n",
    "            'axes.facecolor': 'white' if INK=='black' else 'black',\n",
    "            'axes.grid': False,\n",
    "            'axes.labelcolor': INK,\n",
    "            'axes.labelsize': 13.0,\n",
    "            'axes.labelweight': 'normal',\n",
    "            'axes.linewidth': 1.0,\n",
    "            'axes.spines.left': True,\n",
    "            'axes.spines.bottom': True,\n",
    "            'axes.spines.top': False,\n",
    "            'axes.spines.right': False,\n",
    "            'axes.titlepad': 15.0,\n",
    "            'axes.titlesize': 20.0,\n",
    "            'axes.titleweight': 'bold',\n",
    "            'figure.facecolor': 'white' if INK=='black' else 'black',\n",
    "            'figure.figsize': [4.0, 4.0],\n",
    "            'figure.titlesize': 30.0,\n",
    "            'figure.titleweight': 'bold',\n",
    "            'font.family': ['sans-serif'],\n",
    "            'font.sans-serif': ['Arial'],\n",
    "            'legend.frameon': False,\n",
    "            'legend.fontsize': 11.0,\n",
    "            'lines.color': INK,\n",
    "            'lines.linewidth': 1.0,\n",
    "            'patch.edgecolor': INK,\n",
    "            'savefig.dpi': 300,\n",
    "            'savefig.format': 'png',\n",
    "            'savefig.bbox': 'tight',\n",
    "            'savefig.transparent': True,\n",
    "            'text.color': INK,\n",
    "            'text.usetex': False,\n",
    "            'xtick.color': INK,\n",
    "            'xtick.direction': 'out',\n",
    "            'xtick.labelsize': 12.0,\n",
    "            'xtick.major.pad': 5.0,\n",
    "            'xtick.major.size': 0.0,\n",
    "            'xtick.major.width': 1.0,\n",
    "            'xtick.minor.size': 0.0,\n",
    "            'xtick.minor.width': 0.4,\n",
    "            'ytick.color': INK,\n",
    "            'ytick.direction': 'out',\n",
    "            'ytick.labelsize': 12.0,\n",
    "            'ytick.major.pad': 5.0,\n",
    "            'ytick.major.size': 3.0,\n",
    "            'ytick.major.width': 1.0,\n",
    "            'ytick.minor.size': 0.0,\n",
    "            'ytick.minor.width': 0.4\n",
    "           }\n",
    "       )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Folder already exists, skipping.\n"
     ]
    }
   ],
   "source": [
    "# Prepare the Figures folder to save our graphs in.\n",
    "savepath = os.path.join(r'C:\\Users\\Miguel\\Desktop\\paper_data', 'paper_figures', 'figure2')\n",
    "try:\n",
    "    os.makedirs(savepath)\n",
    "    print('New folder created.')\n",
    "except FileExistsError:\n",
    "    print('Folder already exists, skipping.')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Progeny Fitness Analysis"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": true,
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "small_arenas_aggression_egg_and_progeny_count.xlsx \n",
      "\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>experiment</th>\n",
       "      <th>arena</th>\n",
       "      <th>is_painted</th>\n",
       "      <th>is_first_mated</th>\n",
       "      <th>has_aggression</th>\n",
       "      <th>condition</th>\n",
       "      <th>n_eggs</th>\n",
       "      <th>n_pupae</th>\n",
       "      <th>n_ecloded_males</th>\n",
       "      <th>n_ecloded_females</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>video_2021-10-25T10_37_53</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>partitioned_competition</td>\n",
       "      <td>8</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>video_2021-10-25T10_37_53</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>partitioned_competition</td>\n",
       "      <td>7</td>\n",
       "      <td>7</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>video_2021-10-25T10_37_53</td>\n",
       "      <td>2</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>free_competition</td>\n",
       "      <td>34</td>\n",
       "      <td>15</td>\n",
       "      <td>6</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>video_2021-10-25T10_37_53</td>\n",
       "      <td>2</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>free_competition</td>\n",
       "      <td>9</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>video_2021-10-25T10_37_53</td>\n",
       "      <td>3</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>free_competition</td>\n",
       "      <td>38</td>\n",
       "      <td>11</td>\n",
       "      <td>7</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>177</th>\n",
       "      <td>video_2021-11-05T11_43_44</td>\n",
       "      <td>7</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>38</td>\n",
       "      <td>33</td>\n",
       "      <td>16</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>178</th>\n",
       "      <td>video_2021-11-05T11_43_44</td>\n",
       "      <td>9</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>26</td>\n",
       "      <td>19</td>\n",
       "      <td>12</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>179</th>\n",
       "      <td>video_2021-11-05T11_43_44</td>\n",
       "      <td>10</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>38</td>\n",
       "      <td>23</td>\n",
       "      <td>16</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>180</th>\n",
       "      <td>video_2021-11-05T11_43_44</td>\n",
       "      <td>11</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>24</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>181</th>\n",
       "      <td>video_2021-11-05T11_43_44</td>\n",
       "      <td>12</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>27</td>\n",
       "      <td>25</td>\n",
       "      <td>8</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>182 rows × 10 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                    experiment arena  is_painted  is_first_mated  \\\n",
       "0    video_2021-10-25T10_37_53     1       False           False   \n",
       "1    video_2021-10-25T10_37_53     1        True            True   \n",
       "2    video_2021-10-25T10_37_53     2       False           False   \n",
       "3    video_2021-10-25T10_37_53     2        True            True   \n",
       "4    video_2021-10-25T10_37_53     3       False            True   \n",
       "..                         ...   ...         ...             ...   \n",
       "177  video_2021-11-05T11_43_44     7       False            True   \n",
       "178  video_2021-11-05T11_43_44     9       False            True   \n",
       "179  video_2021-11-05T11_43_44    10       False            True   \n",
       "180  video_2021-11-05T11_43_44    11       False            True   \n",
       "181  video_2021-11-05T11_43_44    12       False            True   \n",
       "\n",
       "     has_aggression                condition  n_eggs  n_pupae  \\\n",
       "0             False  partitioned_competition       8        3   \n",
       "1             False  partitioned_competition       7        7   \n",
       "2              True         free_competition      34       15   \n",
       "3              True         free_competition       9        4   \n",
       "4              True         free_competition      38       11   \n",
       "..              ...                      ...     ...      ...   \n",
       "177           False              single_pair      38       33   \n",
       "178           False              single_pair      26       19   \n",
       "179           False              single_pair      38       23   \n",
       "180           False              single_pair      24        1   \n",
       "181           False              single_pair      27       25   \n",
       "\n",
       "     n_ecloded_males  n_ecloded_females  \n",
       "0                  1                  2  \n",
       "1                  4                  2  \n",
       "2                  6                  9  \n",
       "3                  2                  2  \n",
       "4                  7                  3  \n",
       "..               ...                ...  \n",
       "177               16                 15  \n",
       "178               12                  7  \n",
       "179               16                  6  \n",
       "180                0                  0  \n",
       "181                8                 15  \n",
       "\n",
       "[182 rows x 10 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "for file in os.listdir(os.path.dirname(EXPERIMENTS_PATH)):\n",
    "    if file.startswith('small_arenas_aggression_egg_') and file.endswith('.xlsx'):\n",
    "            \n",
    "        print(file, '\\n')\n",
    "\n",
    "        # Read the data in the Excel file.\n",
    "        progeny_excel = pd.read_excel(io=os.path.join(os.path.dirname(EXPERIMENTS_PATH), file),\n",
    "                                      usecols=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n",
    "                                      na_values='-',\n",
    "                                      engine='openpyxl'\n",
    "                                     )\n",
    "\n",
    "        # Feature engineering.\n",
    "        progeny_excel = progeny_excel.dropna(axis=0, how='all').reset_index(drop=True)\n",
    "\n",
    "        progeny_excel['arena'] = progeny_excel['arena'].astype(int)\n",
    "        progeny_excel['arena'] = progeny_excel['arena'].astype(str)\n",
    "        progeny_excel['is_painted'] = progeny_excel['is_painted'].astype(bool)\n",
    "        progeny_excel['is_first_mated'] = progeny_excel['is_first_mated'].astype(bool)\n",
    "        progeny_excel['has_aggression'] = progeny_excel['has_aggression'].astype(bool)\n",
    "        progeny_excel['n_eggs'] = progeny_excel['n_eggs'].astype(int)\n",
    "        progeny_excel['n_pupae'] = progeny_excel['n_pupae'].astype(int)\n",
    "        progeny_excel['n_ecloded_males'] = progeny_excel['n_ecloded_males'].astype(int)\n",
    "        progeny_excel['n_ecloded_females'] = progeny_excel['n_ecloded_females'].astype(int)\n",
    "\n",
    "progeny_excel"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>experiment</th>\n",
       "      <th>arena</th>\n",
       "      <th>is_painted</th>\n",
       "      <th>is_first_mated</th>\n",
       "      <th>has_aggression</th>\n",
       "      <th>condition</th>\n",
       "      <th>n_eggs</th>\n",
       "      <th>n_pupae</th>\n",
       "      <th>n_ecloded_males</th>\n",
       "      <th>n_ecloded_females</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>video_2021-10-25T10_37_53</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>partitioned_competition</td>\n",
       "      <td>8</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>video_2021-10-25T10_37_53</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>partitioned_competition</td>\n",
       "      <td>7</td>\n",
       "      <td>7</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>video_2021-10-25T10_37_53</td>\n",
       "      <td>2</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>free_competition</td>\n",
       "      <td>34</td>\n",
       "      <td>15</td>\n",
       "      <td>6</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>video_2021-10-25T10_37_53</td>\n",
       "      <td>2</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>free_competition</td>\n",
       "      <td>9</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>video_2021-10-25T10_37_53</td>\n",
       "      <td>3</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>free_competition</td>\n",
       "      <td>38</td>\n",
       "      <td>11</td>\n",
       "      <td>7</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>167</th>\n",
       "      <td>video_2021-11-05T11_43_44</td>\n",
       "      <td>7</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>38</td>\n",
       "      <td>33</td>\n",
       "      <td>16</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>168</th>\n",
       "      <td>video_2021-11-05T11_43_44</td>\n",
       "      <td>9</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>26</td>\n",
       "      <td>19</td>\n",
       "      <td>12</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>169</th>\n",
       "      <td>video_2021-11-05T11_43_44</td>\n",
       "      <td>10</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>38</td>\n",
       "      <td>23</td>\n",
       "      <td>16</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>170</th>\n",
       "      <td>video_2021-11-05T11_43_44</td>\n",
       "      <td>11</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>24</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>171</th>\n",
       "      <td>video_2021-11-05T11_43_44</td>\n",
       "      <td>12</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>27</td>\n",
       "      <td>25</td>\n",
       "      <td>8</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>172 rows × 10 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                    experiment arena  is_painted  is_first_mated  \\\n",
       "0    video_2021-10-25T10_37_53     1       False           False   \n",
       "1    video_2021-10-25T10_37_53     1        True            True   \n",
       "2    video_2021-10-25T10_37_53     2       False           False   \n",
       "3    video_2021-10-25T10_37_53     2        True            True   \n",
       "4    video_2021-10-25T10_37_53     3       False            True   \n",
       "..                         ...   ...         ...             ...   \n",
       "167  video_2021-11-05T11_43_44     7       False            True   \n",
       "168  video_2021-11-05T11_43_44     9       False            True   \n",
       "169  video_2021-11-05T11_43_44    10       False            True   \n",
       "170  video_2021-11-05T11_43_44    11       False            True   \n",
       "171  video_2021-11-05T11_43_44    12       False            True   \n",
       "\n",
       "     has_aggression                condition  n_eggs  n_pupae  \\\n",
       "0             False  partitioned_competition       8        3   \n",
       "1             False  partitioned_competition       7        7   \n",
       "2              True         free_competition      34       15   \n",
       "3              True         free_competition       9        4   \n",
       "4              True         free_competition      38       11   \n",
       "..              ...                      ...     ...      ...   \n",
       "167           False              single_pair      38       33   \n",
       "168           False              single_pair      26       19   \n",
       "169           False              single_pair      38       23   \n",
       "170           False              single_pair      24        1   \n",
       "171           False              single_pair      27       25   \n",
       "\n",
       "     n_ecloded_males  n_ecloded_females  \n",
       "0                  1                  2  \n",
       "1                  4                  2  \n",
       "2                  6                  9  \n",
       "3                  2                  2  \n",
       "4                  7                  3  \n",
       "..               ...                ...  \n",
       "167               16                 15  \n",
       "168               12                  7  \n",
       "169               16                  6  \n",
       "170                0                  0  \n",
       "171                8                 15  \n",
       "\n",
       "[172 rows x 10 columns]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "filtered_progeny = progeny_excel.copy()\n",
    "to_remove = filtered_progeny.query('condition==\"free_competition\" and has_aggression==False').index\n",
    "filtered_progeny = filtered_progeny.drop(index=to_remove).reset_index(drop=True)\n",
    "filtered_progeny"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>experiment</th>\n",
       "      <th>arena</th>\n",
       "      <th>is_painted</th>\n",
       "      <th>is_first_mated</th>\n",
       "      <th>has_aggression</th>\n",
       "      <th>condition</th>\n",
       "      <th>n_eggs</th>\n",
       "      <th>n_pupae</th>\n",
       "      <th>n_ecloded_males</th>\n",
       "      <th>n_ecloded_females</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>video_2021-10-25T10_37_53</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>partitioned_competition</td>\n",
       "      <td>8</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>video_2021-10-25T10_37_53</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>partitioned_competition</td>\n",
       "      <td>7</td>\n",
       "      <td>7</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>video_2021-10-25T10_37_53</td>\n",
       "      <td>2</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>free_competition</td>\n",
       "      <td>34</td>\n",
       "      <td>15</td>\n",
       "      <td>6</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>video_2021-10-25T10_37_53</td>\n",
       "      <td>2</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>free_competition</td>\n",
       "      <td>9</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>video_2021-10-25T10_37_53</td>\n",
       "      <td>3</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>free_competition</td>\n",
       "      <td>38</td>\n",
       "      <td>11</td>\n",
       "      <td>7</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>159</th>\n",
       "      <td>video_2021-11-05T11_43_44</td>\n",
       "      <td>7</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>38</td>\n",
       "      <td>33</td>\n",
       "      <td>16</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>160</th>\n",
       "      <td>video_2021-11-05T11_43_44</td>\n",
       "      <td>9</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>26</td>\n",
       "      <td>19</td>\n",
       "      <td>12</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>161</th>\n",
       "      <td>video_2021-11-05T11_43_44</td>\n",
       "      <td>10</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>38</td>\n",
       "      <td>23</td>\n",
       "      <td>16</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>162</th>\n",
       "      <td>video_2021-11-05T11_43_44</td>\n",
       "      <td>11</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>24</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>163</th>\n",
       "      <td>video_2021-11-05T11_43_44</td>\n",
       "      <td>12</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>27</td>\n",
       "      <td>25</td>\n",
       "      <td>8</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>164 rows × 10 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                    experiment arena  is_painted  is_first_mated  \\\n",
       "0    video_2021-10-25T10_37_53     1       False           False   \n",
       "1    video_2021-10-25T10_37_53     1        True            True   \n",
       "2    video_2021-10-25T10_37_53     2       False           False   \n",
       "3    video_2021-10-25T10_37_53     2        True            True   \n",
       "4    video_2021-10-25T10_37_53     3       False            True   \n",
       "..                         ...   ...         ...             ...   \n",
       "159  video_2021-11-05T11_43_44     7       False            True   \n",
       "160  video_2021-11-05T11_43_44     9       False            True   \n",
       "161  video_2021-11-05T11_43_44    10       False            True   \n",
       "162  video_2021-11-05T11_43_44    11       False            True   \n",
       "163  video_2021-11-05T11_43_44    12       False            True   \n",
       "\n",
       "     has_aggression                condition  n_eggs  n_pupae  \\\n",
       "0             False  partitioned_competition       8        3   \n",
       "1             False  partitioned_competition       7        7   \n",
       "2              True         free_competition      34       15   \n",
       "3              True         free_competition       9        4   \n",
       "4              True         free_competition      38       11   \n",
       "..              ...                      ...     ...      ...   \n",
       "159           False              single_pair      38       33   \n",
       "160           False              single_pair      26       19   \n",
       "161           False              single_pair      38       23   \n",
       "162           False              single_pair      24        1   \n",
       "163           False              single_pair      27       25   \n",
       "\n",
       "     n_ecloded_males  n_ecloded_females  \n",
       "0                  1                  2  \n",
       "1                  4                  2  \n",
       "2                  6                  9  \n",
       "3                  2                  2  \n",
       "4                  7                  3  \n",
       "..               ...                ...  \n",
       "159               16                 15  \n",
       "160               12                  7  \n",
       "161               16                  6  \n",
       "162                0                  0  \n",
       "163                8                 15  \n",
       "\n",
       "[164 rows x 10 columns]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Remove movies from arenas with partition where the first copulation is still ongoing after the partition is removed (there is a chance aggression occurs).\n",
    "filtered_progeny['temp'] = filtered_progeny['experiment'].apply(lambda x: x + '_arena')\n",
    "filtered_progeny['temp'] = filtered_progeny['temp'] + filtered_progeny['arena']\n",
    "matings_over_partition_removal = ['video_2021-10-25T10_37_53_arena5',\n",
    "                                  'video_2021-10-25T11_52_36_arena13',\n",
    "                                  'video_2021-11-02T10_42_41_arena8',\n",
    "                                  'video_2021-11-02T11_47_10_arena5']\n",
    "to_remove = filtered_progeny[filtered_progeny['temp'].isin(matings_over_partition_removal)].index\n",
    "filtered_progeny = filtered_progeny.drop(index=to_remove).reset_index(drop=True)\n",
    "filtered_progeny = filtered_progeny.drop(columns=['temp'])\n",
    "filtered_progeny"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>experiment</th>\n",
       "      <th>arena</th>\n",
       "      <th>is_painted</th>\n",
       "      <th>is_first_mated</th>\n",
       "      <th>has_aggression</th>\n",
       "      <th>condition</th>\n",
       "      <th>n_eggs</th>\n",
       "      <th>n_pupae</th>\n",
       "      <th>n_ecloded_males</th>\n",
       "      <th>n_ecloded_females</th>\n",
       "      <th>n_ecloded_adults</th>\n",
       "      <th>sex_ratio</th>\n",
       "      <th>hatching_rate</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>video_2021-10-25T10_37_53</td>\n",
       "      <td>1</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>partitioned_competition</td>\n",
       "      <td>8</td>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.375000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>video_2021-10-25T10_37_53</td>\n",
       "      <td>1</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>partitioned_competition</td>\n",
       "      <td>7</td>\n",
       "      <td>7</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>6</td>\n",
       "      <td>-0.333333</td>\n",
       "      <td>0.857143</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>video_2021-10-25T10_37_53</td>\n",
       "      <td>2</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>free_competition</td>\n",
       "      <td>34</td>\n",
       "      <td>15</td>\n",
       "      <td>6</td>\n",
       "      <td>9</td>\n",
       "      <td>15</td>\n",
       "      <td>0.200000</td>\n",
       "      <td>0.441176</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>video_2021-10-25T10_37_53</td>\n",
       "      <td>2</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>free_competition</td>\n",
       "      <td>9</td>\n",
       "      <td>4</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.444444</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>video_2021-10-25T10_37_53</td>\n",
       "      <td>3</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>True</td>\n",
       "      <td>free_competition</td>\n",
       "      <td>38</td>\n",
       "      <td>11</td>\n",
       "      <td>7</td>\n",
       "      <td>3</td>\n",
       "      <td>10</td>\n",
       "      <td>-0.400000</td>\n",
       "      <td>0.263158</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>159</th>\n",
       "      <td>video_2021-11-05T11_43_44</td>\n",
       "      <td>7</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>38</td>\n",
       "      <td>33</td>\n",
       "      <td>16</td>\n",
       "      <td>15</td>\n",
       "      <td>31</td>\n",
       "      <td>-0.032258</td>\n",
       "      <td>0.815789</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>160</th>\n",
       "      <td>video_2021-11-05T11_43_44</td>\n",
       "      <td>9</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>26</td>\n",
       "      <td>19</td>\n",
       "      <td>12</td>\n",
       "      <td>7</td>\n",
       "      <td>19</td>\n",
       "      <td>-0.263158</td>\n",
       "      <td>0.730769</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>161</th>\n",
       "      <td>video_2021-11-05T11_43_44</td>\n",
       "      <td>10</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>38</td>\n",
       "      <td>23</td>\n",
       "      <td>16</td>\n",
       "      <td>6</td>\n",
       "      <td>22</td>\n",
       "      <td>-0.454545</td>\n",
       "      <td>0.578947</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>162</th>\n",
       "      <td>video_2021-11-05T11_43_44</td>\n",
       "      <td>11</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>24</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>163</th>\n",
       "      <td>video_2021-11-05T11_43_44</td>\n",
       "      <td>12</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "      <td>single_pair</td>\n",
       "      <td>27</td>\n",
       "      <td>25</td>\n",
       "      <td>8</td>\n",
       "      <td>15</td>\n",
       "      <td>23</td>\n",
       "      <td>0.304348</td>\n",
       "      <td>0.851852</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>164 rows × 13 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                    experiment  arena  is_painted  is_first_mated  \\\n",
       "0    video_2021-10-25T10_37_53      1       False           False   \n",
       "1    video_2021-10-25T10_37_53      1        True            True   \n",
       "2    video_2021-10-25T10_37_53      2       False           False   \n",
       "3    video_2021-10-25T10_37_53      2        True            True   \n",
       "4    video_2021-10-25T10_37_53      3       False            True   \n",
       "..                         ...    ...         ...             ...   \n",
       "159  video_2021-11-05T11_43_44      7       False            True   \n",
       "160  video_2021-11-05T11_43_44      9       False            True   \n",
       "161  video_2021-11-05T11_43_44     10       False            True   \n",
       "162  video_2021-11-05T11_43_44     11       False            True   \n",
       "163  video_2021-11-05T11_43_44     12       False            True   \n",
       "\n",
       "     has_aggression                condition  n_eggs  n_pupae  \\\n",
       "0             False  partitioned_competition       8        3   \n",
       "1             False  partitioned_competition       7        7   \n",
       "2              True         free_competition      34       15   \n",
       "3              True         free_competition       9        4   \n",
       "4              True         free_competition      38       11   \n",
       "..              ...                      ...     ...      ...   \n",
       "159           False              single_pair      38       33   \n",
       "160           False              single_pair      26       19   \n",
       "161           False              single_pair      38       23   \n",
       "162           False              single_pair      24        1   \n",
       "163           False              single_pair      27       25   \n",
       "\n",
       "     n_ecloded_males  n_ecloded_females  n_ecloded_adults  sex_ratio  \\\n",
       "0                  1                  2                 3   0.333333   \n",
       "1                  4                  2                 6  -0.333333   \n",
       "2                  6                  9                15   0.200000   \n",
       "3                  2                  2                 4   0.000000   \n",
       "4                  7                  3                10  -0.400000   \n",
       "..               ...                ...               ...        ...   \n",
       "159               16                 15                31  -0.032258   \n",
       "160               12                  7                19  -0.263158   \n",
       "161               16                  6                22  -0.454545   \n",
       "162                0                  0                 0   0.000000   \n",
       "163                8                 15                23   0.304348   \n",
       "\n",
       "     hatching_rate  \n",
       "0         0.375000  \n",
       "1         0.857143  \n",
       "2         0.441176  \n",
       "3         0.444444  \n",
       "4         0.263158  \n",
       "..             ...  \n",
       "159       0.815789  \n",
       "160       0.730769  \n",
       "161       0.578947  \n",
       "162       0.000000  \n",
       "163       0.851852  \n",
       "\n",
       "[164 rows x 13 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# More feature engineering.\n",
    "clean_progeny_df = filtered_progeny.copy()\n",
    "clean_progeny_df['arena'] = clean_progeny_df['arena'].astype(int)\n",
    "clean_progeny_df['n_ecloded_adults'] = clean_progeny_df['n_ecloded_males'] + clean_progeny_df['n_ecloded_females']\n",
    "clean_progeny_df['sex_ratio'] = (clean_progeny_df['n_ecloded_females'] - clean_progeny_df['n_ecloded_males']) / clean_progeny_df['n_ecloded_adults']\n",
    "clean_progeny_df['hatching_rate'] = clean_progeny_df['n_ecloded_adults'] / clean_progeny_df['n_eggs']\n",
    "clean_progeny_df.fillna(value=0, inplace=True)\n",
    "clean_progeny_df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Amount of Eggs from First Mating (Aggression Sink)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Statistics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\t partitioned_competition \n",
      "\n",
      "Shapiro's Test: group 1 IS normally distributed.\n",
      "D'Agostino's Test: group 1 IS normally distributed.\n",
      "Shapiro's Test: group 2 IS normally distributed.\n",
      "D'Agostino's Test: group 2 IS normally distributed.\n",
      "Bartlett's Test for normally distribted samples:\n",
      "  p-value = 0.226372\n",
      "  All groups were sampled from populations with IDENTICAL variances.\n",
      "\n",
      "Independent measures (two sample) t-test p-value: 0.08938793199047287 \n",
      "\n",
      "\n",
      "\t single_pair \n",
      "\n",
      "Shapiro's Test: group 1 IS normally distributed.\n",
      "D'Agostino's Test: group 1 IS normally distributed.\n",
      "Shapiro's Test: group 2 IS normally distributed.\n",
      "D'Agostino's Test: group 2 IS NOT normally distributed.\n",
      "Levene's Test for non-normally distributed samples:\n",
      "  p-value = 0.218216\n",
      "  All groups were sampled from populations with IDENTICAL variances.\n",
      "\n",
      "Mann-Whitney p-value: 0.2955161371077427 \n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'partitioned_competition': 0.08938793199047287,\n",
       " 'single_pair': 0.2955161371077427}"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "first_mating_eggs_pvalues = {}\n",
    "\n",
    "control = clean_progeny_df.query('condition==\"free_competition\" and is_first_mated==True')['n_eggs']\n",
    "\n",
    "for condition in condition_order[1:]:\n",
    "    \n",
    "    print('\\n\\t', condition, '\\n')\n",
    "    \n",
    "    try:\n",
    "        test = clean_progeny_df.query('condition==\"' + condition + '\" and is_first_mated==True')['n_eggs']\n",
    "\n",
    "        temp_values = {'control': control, 'test': test}\n",
    "\n",
    "        pvalue_aggression = helpers.run_statistics(temp_values)\n",
    "\n",
    "        first_mating_eggs_pvalues[condition] = pvalue_aggression\n",
    "\n",
    "    except ValueError as error:\n",
    "        print(error)\n",
    "        \n",
    "first_mating_eggs_pvalues"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Bonferroni Correction\n",
      "---------------------\n",
      "\n",
      "\tOriginal Values:\n",
      " {'partitioned_competition': 0.08938793199047287, 'single_pair': 0.2955161371077427}\n",
      "\n",
      "\tCorrected Values:\n",
      " {'partitioned_competition': 0.17877586398094575, 'single_pair': 0.5910322742154854} \n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Bonferroni corretction for multiple comparisons.\n",
    "title = 'Bonferroni Correction'\n",
    "print(title)\n",
    "print('-'*len(title))\n",
    "\n",
    "# Show uncorrected values.\n",
    "print('\\n\\tOriginal Values:\\n', first_mating_eggs_pvalues)\n",
    "\n",
    "# Apply the bonferroni correction for multiple comparisons.\n",
    "first_mating_eggs_multi_comp_correction = multipletests(pvals=list(first_mating_eggs_pvalues.values()), alpha=0.05, method='bonferroni')[1]\n",
    "\n",
    "# Transform the correction results into a dictionary.\n",
    "corrected_first_mating_eggs_pvalues = dict(zip(list(first_mating_eggs_pvalues.keys()), first_mating_eggs_multi_comp_correction))\n",
    "\n",
    "# Show corrected values.\n",
    "print('\\n\\tCorrected Values:\\n', corrected_first_mating_eggs_pvalues, '\\n')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Effect Size"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "partitioned_competition\n",
      "Small Effect: -0.3191489361702128 \n",
      "\n",
      "single_pair\n",
      "Vestigial Effect: -0.06382978723404255 \n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'partitioned_competition': -0.3191489361702128,\n",
       " 'single_pair': -0.06382978723404255}"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "first_mating_eggs_effect_sizes = {}\n",
    "\n",
    "control = clean_progeny_df.query('condition==\"free_competition\" and is_first_mated==True')['n_eggs']\n",
    "\n",
    "for condition in condition_order[1:]:\n",
    "    \n",
    "    print(condition)\n",
    "    \n",
    "    test = clean_progeny_df.query('condition==\"' + condition + '\" and is_first_mated==True')['n_eggs']\n",
    "\n",
    "    median_diff = helpers.get_effect_size(control, test, method='median_diff')\n",
    "    \n",
    "    first_mating_eggs_effect_sizes[condition] = median_diff\n",
    "    \n",
    "first_mating_eggs_effect_sizes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 270x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Initialize figure.\n",
    "n_conditions = clean_progeny_df['condition'].nunique()\n",
    "figure, axis = plt.subplots(figsize=(1.25*n_conditions, 4))\n",
    "\n",
    "# Draw the boxplot.\n",
    "sns.boxplot(x='condition',\n",
    "            y='n_eggs',\n",
    "            data=clean_progeny_df.query('is_first_mated==True'),\n",
    "            order=condition_order,\n",
    "            palette=['#3c096c', '#7b2cbf', '#c77dff'],\n",
    "            width=0.6,\n",
    "            showfliers=False,\n",
    "            boxprops={'edgecolor': INK},\n",
    "            medianprops={'color': INK},\n",
    "            whiskerprops={'color': INK},\n",
    "            capprops={'color': INK}\n",
    "           )\n",
    "\n",
    "# Draw the swarmplot.\n",
    "sns.swarmplot(x='condition',\n",
    "              y='n_eggs',\n",
    "              data=clean_progeny_df.query('is_first_mated==True'),\n",
    "              order=condition_order,\n",
    "              palette=['#3c096c', '#7b2cbf', '#c77dff'],\n",
    "              linewidth=0.75,\n",
    "              edgecolor=INK,\n",
    "              dodge=True\n",
    "             )\n",
    "\n",
    "# Figure and axes formatting.\n",
    "axis.set_xlabel('')\n",
    "axis.set_xticklabels([''])\n",
    "axis.set_ylabel('# Eggs')\n",
    "axis.set_ylim(0, 60)\n",
    "axis.set_yticks(range(0, 60+1, 10))\n",
    "axis.set_yticklabels(range(0, 60+1, 10))\n",
    "\n",
    "# Table definition.\n",
    "row1 = [str(clean_progeny_df.query('is_first_mated==True and condition==\"'+condition+'\"').shape[0]) for condition in condition_order]\n",
    "row2 = ['With\\naggression', 'Without\\naggression\\n(Partition)', 'Without\\naggression\\n(Single couple)']\n",
    "cell_text = np.array([row1, row2])\n",
    "\n",
    "row_labels = ['n =', '']\n",
    "summary_table = axis.table(cellText= cell_text,\n",
    "                           cellLoc='center',\n",
    "                           rowLabels=row_labels,\n",
    "                           rowLoc='center',\n",
    "                           colLoc='center'\n",
    "                          )\n",
    "\n",
    "summary_table.auto_set_font_size(False)\n",
    "summary_table.set_fontsize(11)\n",
    "\n",
    "properties = summary_table.properties()\n",
    "table_cells = properties['children']\n",
    "for cell in table_cells:\n",
    "    cell.set_height(0.12)\n",
    "    cell.set_alpha(0)\n",
    "\n",
    "# Draw statistical results.\n",
    "for p, condition in enumerate(condition_order[1:]):\n",
    "    sig_height = 6 if (corrected_first_mating_eggs_pvalues.get(condition, 'NaN') == 'NaN') or (corrected_first_mating_eggs_pvalues.get(condition, 'NaN') >= 0.05) else 2\n",
    "    helpers.plot_stattest_result(ax=axis,\n",
    "                                 x1=p+1,\n",
    "                                 x2=p+1,\n",
    "                                 p_value=corrected_first_mating_eggs_pvalues.get(condition, 'NaN'),\n",
    "                                 y=55,\n",
    "                                 ticksize=0,\n",
    "                                 xytext=(0,sig_height),\n",
    "                                 fontsize=13,\n",
    "                                 color=INK,\n",
    "                                 connector_color=INK\n",
    "                                )\n",
    "\n",
    "# Saving parameters.\n",
    "filename = 'n_eggs_first_mating'\n",
    "plt.savefig(os.path.join(savepath, filename))\n",
    "\n",
    "plt.show()\n",
    "plt.close()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Hatching Rate from First Mating (Aggression Sink)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Statistics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\t partitioned_competition \n",
      "\n",
      "Shapiro's Test: group 1 IS normally distributed.\n",
      "D'Agostino's Test: group 1 IS normally distributed.\n",
      "Shapiro's Test: group 2 IS normally distributed.\n",
      "D'Agostino's Test: group 2 IS normally distributed.\n",
      "Bartlett's Test for normally distribted samples:\n",
      "  p-value = 0.823693\n",
      "  All groups were sampled from populations with IDENTICAL variances.\n",
      "\n",
      "Independent measures (two sample) t-test p-value: 0.5543518422984763 \n",
      "\n",
      "\n",
      "\t single_pair \n",
      "\n",
      "Shapiro's Test: group 1 IS normally distributed.\n",
      "D'Agostino's Test: group 1 IS normally distributed.\n",
      "Shapiro's Test: group 2 IS NOT normally distributed.\n",
      "D'Agostino's Test: group 2 IS NOT normally distributed.\n",
      "Levene's Test for non-normally distributed samples:\n",
      "  p-value = 0.075220\n",
      "  All groups were sampled from populations with IDENTICAL variances.\n",
      "\n",
      "Mann-Whitney p-value: 0.21439707486024706 \n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'partitioned_competition': 0.5543518422984763,\n",
       " 'single_pair': 0.21439707486024706}"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "first_mating_hatching_pvalues = {}\n",
    "\n",
    "control = clean_progeny_df.query('condition==\"free_competition\" and is_first_mated==True')['hatching_rate']\n",
    "\n",
    "for condition in condition_order[1:]:\n",
    "    \n",
    "    print('\\n\\t', condition, '\\n')\n",
    "    \n",
    "    try:\n",
    "        test = clean_progeny_df.query('condition==\"' + condition + '\" and is_first_mated==True')['hatching_rate']\n",
    "\n",
    "        temp_values = {'control': control, 'test': test}\n",
    "\n",
    "        pvalue_aggression = helpers.run_statistics(temp_values)\n",
    "\n",
    "        first_mating_hatching_pvalues[condition] = pvalue_aggression\n",
    "\n",
    "    except ValueError as error:\n",
    "        print(error)\n",
    "        \n",
    "first_mating_hatching_pvalues"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Bonferroni Correction\n",
      "---------------------\n",
      "\n",
      "\tOriginal Values:\n",
      " {'partitioned_competition': 0.5543518422984763, 'single_pair': 0.21439707486024706}\n",
      "\n",
      "\tCorrected Values:\n",
      " {'partitioned_competition': 1.0, 'single_pair': 0.4287941497204941} \n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Bonferroni corretction for multiple comparisons.\n",
    "title = 'Bonferroni Correction'\n",
    "print(title)\n",
    "print('-'*len(title))\n",
    "\n",
    "# Show uncorrected values.\n",
    "print('\\n\\tOriginal Values:\\n', first_mating_hatching_pvalues)\n",
    "\n",
    "# Apply the bonferroni correction for multiple comparisons.\n",
    "first_mating_hatching_multi_comp_correction = multipletests(pvals=list(first_mating_hatching_pvalues.values()), alpha=0.05, method='bonferroni')[1]\n",
    "\n",
    "# Transform the correction results into a dictionary.\n",
    "corrected_first_mating_hatching_pvalues = dict(zip(list(first_mating_hatching_pvalues.keys()), first_mating_hatching_multi_comp_correction))\n",
    "\n",
    "# Show corrected values.\n",
    "print('\\n\\tCorrected Values:\\n', corrected_first_mating_hatching_pvalues, '\\n')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Effect Size"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "partitioned_competition\n",
      "Vestigial Effect: 0.13038277511961727 \n",
      "\n",
      "single_pair\n",
      "Vestigial Effect: 0.03417480352464874 \n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'partitioned_competition': 0.13038277511961727,\n",
       " 'single_pair': 0.03417480352464874}"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "first_mating_hatching_effect_sizes = {}\n",
    "\n",
    "control = clean_progeny_df.query('condition==\"free_competition\" and is_first_mated==True')['hatching_rate']\n",
    "\n",
    "for condition in condition_order[1:]:\n",
    "    \n",
    "    print(condition)\n",
    "    \n",
    "    test = clean_progeny_df.query('condition==\"' + condition + '\" and is_first_mated==True')['hatching_rate']\n",
    "\n",
    "    median_diff = helpers.get_effect_size(control, test, method='median_diff')\n",
    "    \n",
    "    first_mating_hatching_effect_sizes[condition] = median_diff\n",
    "    \n",
    "first_mating_hatching_effect_sizes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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O3eOpKQkevfuzYABA7Sdtq+99ho3b97kyJEjeHt707JlSwBCQ0PZuXOn9lxdu3YF4MCBAyQlJeHl5QVAUVERnp6ejB8/nsTERPr160dAQACfffYZAAMHDqRbt24EBgYSFBSEh4cHBw8eBODOnTskJyczZMgQALy8vLC2tiYxMREAf39/jIyMcHFxKfMmO1UmVVMmqs9CASA8PJwRI0ZgaWnJ6NGj6dmzJ40aNSpz+zHcG0Iub/199192rNFoGDp0KLGxscTGxhIdHc2yZcto0qQJCQkJTJo0icTERDw9PcnJyWHJkiVs376dxo0bM3LkSDZt2qQ9Z3mfJw/cCn3/bXYPPpn531JlokslCwOh717//fv3M3ToUEaPHk2jRo04cOAAABEREdy+fZuioiK2b9+OkZERL7zwAidPnuTatWuICN9++225/yF79erFzp07ycjIQEQYP348X3zxBeHh4bz++uu89NJLLF26lHr16pGWloajoyM2NjZ8+OGHhISEcPr0ae25GjRoQJs2bdixYwcAx48fJz09HRcXF1UmNVQmqhliIPTd6z927FiGDx/ON998g5mZGd26dSMzM5PJkyfj7e1NvXr1sLGxwcLCgqZNm7J06VL8/PwwNzfH3t6exo0blzmnu7s7YWFh+Pr6UlpaioeHB9OnT8fY2Jjt27fj7OyMubk5I0eOxNXVlblz5+Ln54eFhQW2trasX7+es2fPas+3adMmxo0bR1hYGHXr1mXHjh2YmZmpMqmpMvmvez2eMqqHu+ISExPl888/1y4PGjRIwsPDJSsrS2bNmiUajUZERCZNmiRLly6t1lgMRW0uk1rXDImKisLMzIxjx46RnJxMTk4OCxYsYPny5cTExHDkyBGSkpKAew9+vfvuu/z888+cPHmyTCdR//79SUxMJDMzk9WrVxMVFUVsbCy2trYsXLiQqKgosrOzOX36NHv27NHOkzhz5kx++uknYmJicHBw4Ny5czrnHTlyJJMnTyYuLo7FixcTHBysfegsLS2NI0eOEB4eztSpU6u1rOzs7Dh58qR21iZHR0cGDBiAtbU1OTk5uLi44Obmxu3btxk7dmy1xmIoanOZ1LpmiOrhrri6deuyefPmcrctWbKkWj/bUNXmMql1NQvVw60oT6bWJQvVw10xGo2GIUOGMG3aNJo1a4aHhwceHh44OTkxc+bM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\n",
      "text/plain": [
       "<Figure size 270x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Initialize figure.\n",
    "n_conditions = clean_progeny_df['condition'].nunique()\n",
    "figure, axis = plt.subplots(figsize=(1.25*n_conditions, 4))\n",
    "\n",
    "# Draw the boxplot.\n",
    "sns.boxplot(x='condition',\n",
    "            y='hatching_rate',\n",
    "            data=clean_progeny_df.query('is_first_mated==True'),\n",
    "            order=condition_order,\n",
    "            palette=['#3c096c', '#7b2cbf', '#c77dff'],\n",
    "            width=0.6,\n",
    "            showfliers=False,\n",
    "            boxprops={'edgecolor': INK},\n",
    "            medianprops={'color': INK},\n",
    "            whiskerprops={'color': INK},\n",
    "            capprops={'color': INK}\n",
    "           )\n",
    "\n",
    "# Draw the swarmplot.\n",
    "sns.swarmplot(x='condition',\n",
    "              y='hatching_rate',\n",
    "              data=clean_progeny_df.query('is_first_mated==True'),\n",
    "              order=condition_order,\n",
    "              palette=['#3c096c', '#7b2cbf', '#c77dff'],\n",
    "              linewidth=0.75,\n",
    "              edgecolor=INK,\n",
    "              dodge=True\n",
    "             )\n",
    "\n",
    "# Figure and axes formatting.\n",
    "axis.set_xlabel('')\n",
    "axis.set_xticklabels([''])\n",
    "axis.set_ylabel('Hatching Rate (%)')\n",
    "axis.set_ylim(0, 1.02)\n",
    "axis.set_yticks(np.arange(0, 1+0.1, 0.2))\n",
    "axis.set_yticklabels([int(y*100) for y in axis.get_yticks()])\n",
    "\n",
    "# Table definition.\n",
    "row1 = [str(clean_progeny_df.query('is_first_mated==True and condition==\"'+condition+'\"').shape[0]) for condition in condition_order]\n",
    "row2 = ['With\\naggression', 'Without\\naggression\\n(Partition)', 'Without\\naggression\\n(Single couple)']\n",
    "cell_text = np.array([row1, row2])\n",
    "\n",
    "row_labels = ['n =', '']\n",
    "summary_table = axis.table(cellText= cell_text,\n",
    "                           cellLoc='center',\n",
    "                           rowLabels=row_labels,\n",
    "                           rowLoc='center',\n",
    "                           colLoc='center'\n",
    "                          )\n",
    "\n",
    "summary_table.auto_set_font_size(False)\n",
    "summary_table.set_fontsize(11)\n",
    "\n",
    "properties = summary_table.properties()\n",
    "table_cells = properties['children']\n",
    "for cell in table_cells:\n",
    "    cell.set_height(0.12)\n",
    "    cell.set_alpha(0)\n",
    "\n",
    "# Draw statistical results.\n",
    "for p, condition in enumerate(condition_order[1:]):\n",
    "    sig_height = 6 if (corrected_first_mating_hatching_pvalues.get(condition, 'NaN') == 'NaN') or (corrected_first_mating_hatching_pvalues.get(condition, 'NaN') >= 0.05) else 2\n",
    "    helpers.plot_stattest_result(ax=axis,\n",
    "                                 x1=p+1,\n",
    "                                 x2=p+1,\n",
    "                                 p_value=corrected_first_mating_hatching_pvalues.get(condition, 'NaN'),\n",
    "                                 y=1.05,\n",
    "                                 ticksize=0,\n",
    "                                 xytext=(0,sig_height),\n",
    "                                 fontsize=13,\n",
    "                                 color=INK,\n",
    "                                 connector_color=INK\n",
    "                                )\n",
    "\n",
    "# Saving parameters.\n",
    "filename = 'hatching_rate_first_mating'\n",
    "plt.savefig(os.path.join(savepath, filename))\n",
    "\n",
    "plt.show()\n",
    "plt.close()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Amount of Eggs from Second Mating (Aggression Source)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Statistics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\t partitioned_competition \n",
      "\n",
      "Shapiro's Test: group 1 IS NOT normally distributed.\n",
      "D'Agostino's Test: group 1 IS NOT normally distributed.\n",
      "Shapiro's Test: group 2 IS normally distributed.\n",
      "D'Agostino's Test: group 2 IS normally distributed.\n",
      "Levene's Test for non-normally distributed samples:\n",
      "  p-value = 0.172612\n",
      "  All groups were sampled from populations with IDENTICAL variances.\n",
      "\n",
      "Mann-Whitney p-value: 0.3912055802487836 \n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'partitioned_competition': 0.3912055802487836}"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "second_mating_eggs_pvalues = {}\n",
    "\n",
    "control = clean_progeny_df.query('condition==\"free_competition\" and is_first_mated==False')['n_eggs']\n",
    "\n",
    "for condition in condition_order[1:2]:\n",
    "    \n",
    "    print('\\n\\t', condition, '\\n')\n",
    "    \n",
    "    try:\n",
    "        test = clean_progeny_df.query('condition==\"' + condition + '\" and is_first_mated==False')['n_eggs']\n",
    "\n",
    "        temp_values = {'control': control, 'test': test}\n",
    "\n",
    "        pvalue_aggression = helpers.run_statistics(temp_values)\n",
    "\n",
    "        second_mating_eggs_pvalues[condition] = pvalue_aggression\n",
    "\n",
    "    except ValueError as error:\n",
    "        print(error)\n",
    "        \n",
    "second_mating_eggs_pvalues"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Effect Size"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "partitioned_competition\n",
      "Vestigial Effect: 0.14634146341463414 \n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'partitioned_competition': 0.14634146341463414}"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "second_mating_eggs_effect_sizes = {}\n",
    "\n",
    "control = clean_progeny_df.query('condition==\"free_competition\" and is_first_mated==False')['n_eggs']\n",
    "\n",
    "for condition in condition_order[1:2]:\n",
    "    \n",
    "    print(condition)\n",
    "    \n",
    "    test = clean_progeny_df.query('condition==\"' + condition + '\" and is_first_mated==False')['n_eggs']\n",
    "\n",
    "    median_diff = helpers.get_effect_size(control, test, method='median_diff')\n",
    "    \n",
    "    second_mating_eggs_effect_sizes[condition] = median_diff\n",
    "    \n",
    "second_mating_eggs_effect_sizes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 180x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Initialize figure.\n",
    "n_conditions = len(condition_order[:2])\n",
    "figure, axis = plt.subplots(figsize=(1.25*n_conditions, 4))\n",
    "\n",
    "# Draw the boxplot.\n",
    "sns.boxplot(x='condition',\n",
    "            y='n_eggs',\n",
    "            data=clean_progeny_df.query('is_first_mated==False'),\n",
    "            order=condition_order[:2],\n",
    "            palette=['#3c096c', '#7b2cbf'],\n",
    "            width=0.6,\n",
    "            showfliers=False,\n",
    "            boxprops={'edgecolor': INK},\n",
    "            medianprops={'color': INK},\n",
    "            whiskerprops={'color': INK},\n",
    "            capprops={'color': INK}\n",
    "           )\n",
    "\n",
    "# Draw the swarmplot.\n",
    "sns.swarmplot(x='condition',\n",
    "              y='n_eggs',\n",
    "              data=clean_progeny_df.query('is_first_mated==False'),\n",
    "              order=condition_order[:2],\n",
    "              palette=['#3c096c', '#7b2cbf'],\n",
    "              linewidth=0.75,\n",
    "              edgecolor=INK,\n",
    "              dodge=True\n",
    "             )\n",
    "\n",
    "# Figure and axes formatting.\n",
    "axis.set_xlabel('')\n",
    "axis.set_xticklabels([''])\n",
    "axis.set_ylabel('# Eggs')\n",
    "axis.set_ylim(0, 45)\n",
    "axis.set_yticks(range(0, 45+1, 5))\n",
    "axis.set_yticklabels(range(0, 45+1, 5))\n",
    "\n",
    "# Table definition.\n",
    "row1 = [str(clean_progeny_df.query('is_first_mated==False and condition==\"'+condition+'\"').shape[0]) for condition in condition_order[:2]]\n",
    "row2 = ['With\\naggression', 'Without\\naggression\\n(Partition)']\n",
    "cell_text = np.array([row1, row2])\n",
    "\n",
    "row_labels = ['n =', '']\n",
    "summary_table = axis.table(cellText= cell_text,\n",
    "                           cellLoc='center',\n",
    "                           rowLabels=row_labels,\n",
    "                           rowLoc='center',\n",
    "                           colLoc='center'\n",
    "                          )\n",
    "\n",
    "summary_table.auto_set_font_size(False)\n",
    "summary_table.set_fontsize(11)\n",
    "\n",
    "properties = summary_table.properties()\n",
    "table_cells = properties['children']\n",
    "for cell in table_cells:\n",
    "    cell.set_height(0.12)\n",
    "    cell.set_alpha(0)\n",
    "\n",
    "# Draw statistical results.\n",
    "for p, condition in enumerate(condition_order[1:2]):\n",
    "    sig_height = 6 if (second_mating_eggs_pvalues.get(condition, 'NaN') == 'NaN') or (second_mating_eggs_pvalues.get(condition, 'NaN') >= 0.05) else 2\n",
    "    helpers.plot_stattest_result(ax=axis,\n",
    "                                 x1=p+1,\n",
    "                                 x2=p+1,\n",
    "                                 p_value=second_mating_eggs_pvalues.get(condition, 'NaN'),\n",
    "                                 y=43,\n",
    "                                 ticksize=0,\n",
    "                                 xytext=(0,sig_height),\n",
    "                                 fontsize=13,\n",
    "                                 color=INK,\n",
    "                                 connector_color=INK\n",
    "                                )\n",
    "\n",
    "# Saving parameters.\n",
    "filename = 'n_eggs_second_mating'\n",
    "plt.savefig(os.path.join(savepath, filename))\n",
    "\n",
    "plt.show()\n",
    "plt.close()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Hatching Rate from Second Mating (Aggression Source)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Statistics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "\t partitioned_competition \n",
      "\n",
      "Shapiro's Test: group 1 IS normally distributed.\n",
      "D'Agostino's Test: group 1 IS normally distributed.\n",
      "Shapiro's Test: group 2 IS normally distributed.\n",
      "D'Agostino's Test: group 2 IS normally distributed.\n",
      "Bartlett's Test for normally distribted samples:\n",
      "  p-value = 0.940264\n",
      "  All groups were sampled from populations with IDENTICAL variances.\n",
      "\n",
      "Independent measures (two sample) t-test p-value: 0.749853912004742 \n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'partitioned_competition': 0.749853912004742}"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "second_mating_hatching_pvalues = {}\n",
    "\n",
    "control = clean_progeny_df.query('condition==\"free_competition\" and is_first_mated==False')['hatching_rate']\n",
    "\n",
    "for condition in condition_order[1:2]:\n",
    "    \n",
    "    print('\\n\\t', condition, '\\n')\n",
    "    \n",
    "    try:\n",
    "        test = clean_progeny_df.query('condition==\"' + condition + '\" and is_first_mated==False')['hatching_rate']\n",
    "\n",
    "        temp_values = {'control': control, 'test': test}\n",
    "\n",
    "        pvalue_aggression = helpers.run_statistics(temp_values)\n",
    "\n",
    "        second_mating_hatching_pvalues[condition] = pvalue_aggression\n",
    "\n",
    "    except ValueError as error:\n",
    "        print(error)\n",
    "        \n",
    "second_mating_hatching_pvalues"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Effect Size"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "partitioned_competition\n",
      "Vestigial Effect: -0.020887405759485847 \n",
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'partitioned_competition': -0.020887405759485847}"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "second_mating_hatching_effect_sizes = {}\n",
    "\n",
    "control = clean_progeny_df.query('condition==\"free_competition\" and is_first_mated==False')['hatching_rate']\n",
    "\n",
    "for condition in condition_order[1:2]:\n",
    "    \n",
    "    print(condition)\n",
    "    \n",
    "    test = clean_progeny_df.query('condition==\"' + condition + '\" and is_first_mated==False')['hatching_rate']\n",
    "\n",
    "    median_diff = helpers.get_effect_size(control, test, method='median_diff')\n",
    "    \n",
    "    second_mating_hatching_effect_sizes[condition] = median_diff\n",
    "    \n",
    "second_mating_hatching_effect_sizes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Plot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 180x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Initialize figure.\n",
    "n_conditions = len(condition_order[:2])\n",
    "figure, axis = plt.subplots(figsize=(1.25*n_conditions, 4))\n",
    "\n",
    "# Draw the boxplot.\n",
    "sns.boxplot(x='condition',\n",
    "            y='hatching_rate',\n",
    "            data=clean_progeny_df.query('is_first_mated==False'),\n",
    "            order=condition_order[:2],\n",
    "            palette=['#3c096c', '#7b2cbf'],\n",
    "            width=0.6,\n",
    "            showfliers=False,\n",
    "            boxprops={'edgecolor': INK},\n",
    "            medianprops={'color': INK},\n",
    "            whiskerprops={'color': INK},\n",
    "            capprops={'color': INK}\n",
    "           )\n",
    "\n",
    "# Draw the swarmplot.\n",
    "sns.swarmplot(x='condition',\n",
    "              y='hatching_rate',\n",
    "              data=clean_progeny_df.query('is_first_mated==False'),\n",
    "              order=condition_order[:2],\n",
    "              palette=['#3c096c', '#7b2cbf'],\n",
    "              linewidth=0.75,\n",
    "              edgecolor=INK,\n",
    "              dodge=True\n",
    "             )\n",
    "\n",
    "# Figure and axes formatting.\n",
    "axis.set_xlabel('')\n",
    "axis.set_xticklabels([''])\n",
    "axis.set_ylabel('Hatching Rate (%)')\n",
    "axis.set_ylim(0, 1.02)\n",
    "axis.set_yticks(np.arange(0, 1+0.1, 0.2))\n",
    "axis.set_yticklabels([int(y*100) for y in axis.get_yticks()])\n",
    "\n",
    "# Table definition.\n",
    "row1 = [str(clean_progeny_df.query('is_first_mated==False and condition==\"'+condition+'\"').shape[0]) for condition in condition_order[:2]]\n",
    "row2 = ['With\\naggression', 'Without\\naggression\\n(Partition)']\n",
    "cell_text = np.array([row1, row2])\n",
    "\n",
    "row_labels = ['n =', '']\n",
    "summary_table = axis.table(cellText= cell_text,\n",
    "                           cellLoc='center',\n",
    "                           rowLabels=row_labels,\n",
    "                           rowLoc='center',\n",
    "                           colLoc='center'\n",
    "                          )\n",
    "\n",
    "summary_table.auto_set_font_size(False)\n",
    "summary_table.set_fontsize(11)\n",
    "\n",
    "properties = summary_table.properties()\n",
    "table_cells = properties['children']\n",
    "for cell in table_cells:\n",
    "    cell.set_height(0.12)\n",
    "    cell.set_alpha(0)\n",
    "\n",
    "# Draw statistical results.\n",
    "for p, condition in enumerate(condition_order[1:2]):\n",
    "    sig_height = 6 if (second_mating_hatching_pvalues.get(condition, 'NaN') == 'NaN') or (second_mating_hatching_pvalues.get(condition, 'NaN') >= 0.05) else 2\n",
    "    helpers.plot_stattest_result(ax=axis,\n",
    "                                 x1=p+1,\n",
    "                                 x2=p+1,\n",
    "                                 p_value=second_mating_hatching_pvalues.get(condition, 'NaN'),\n",
    "                                 y=0.98,\n",
    "                                 ticksize=0,\n",
    "                                 xytext=(0,sig_height),\n",
    "                                 fontsize=13,\n",
    "                                 color=INK,\n",
    "                                 connector_color=INK\n",
    "                                )\n",
    "\n",
    "# Saving parameters.\n",
    "filename = 'hatching_rate_second_mating'\n",
    "plt.savefig(os.path.join(savepath, filename))\n",
    "\n",
    "plt.show()\n",
    "plt.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.2"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
